1
상태 유지 프로세스와 꼬리 호출 최적화
AI019Lesson 7
00:00

엘릭서에서는 기본적으로 프로세스가 짧은 생명 주기를 가집니다. 함수가 완료되면 프로세스는 종료됩니다. 지속적인 상태를 가진 프로세스를 만들기 위해 지속적이고 상태를 유지하는 프로세스재귀를 사용하여 프로세스를 루프 안에서 계속 살아 있게 합니다.

1. 꼬리 호출 최적화 (TCO)

함수의 절대 마지막 동작이 자기 자신을 호출하는 경우, 에르랭 가상머신(빔)은 꼬리 호출 최적화를 수행합니다. 스택에 새로운 프레임을 추가하는 대신 단순히 함수 시작 부분으로 다시 점프 새로운 인수와 함께 함수의 시작 부분으로 이동합니다.

def factorial(n, acc), do: _fact(n-1, acc*n) # TCO
def factorial(n), do: n * factorial(n-1) # TCO 아님
안녕하기() 로직안녕하기() 호출TCO: 스택 프레임 재사용

2. 지속적 상태

상태는 재귀 호출에 업데이트된 값을 인수로 전달함으로써 유지됩니다. TCO 덕분에 이 인수들은 스택 위의 원래 매개변수를 대체하며 추가 메모리를 소비하지 않아, 루프가 무한히 실행될 수 있습니다.

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>